﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BibliotecasDeBase.AccesoADatos;
using System.Collections;
using System.Data;

/// <summary>
/// Descripción breve de PostServices
/// </summary>
public class PostServices
{
    Ado ado;

	public PostServices()
	{
        ado = new Ado();
	}

    ~PostServices()
    {
        ado = null;
    }

    public int CrearPost(int UsuarioId, string Titulo, string Contenido, int CategoriaPostId)
    {
        //valido que no tenga datos vacios
        if (UsuarioId > 0 && Titulo != "" && Contenido != "" && CategoriaPostId > 0)
        {
            ArrayList ParametrosPost = new ArrayList();
            ParametrosPost.Add(Titulo);
            ParametrosPost.Add(Contenido);
            ParametrosPost.Add(UsuarioId);
            ParametrosPost.Add(CategoriaPostId);

            ado.EjecutarStoredProcedure(false, "Post_InsertarPost", ParametrosPost);
            ado.EjecutarStoredProcedure(false, "Post_GetIdPostCreado", null);
            DataRow row = ado.DevolverDataTable().Rows[0];
            return Convert.ToInt32(row[0]);
        }
        else
            return -1;
    }



    public Post BuscarPost(string postId)
    {
        ArrayList parametros = new ArrayList();
        parametros.Add(Convert.ToInt32(postId));
        ado.EjecutarStoredProcedure(false, "Post_BuscarPostPorId", parametros);
        DataRow row = ado.DevolverDataTable().Rows[0];
        Post post = CrearPostDesdeRow(row);

        return post;
    }

    private Post CrearPostDesdeRow(DataRow row)
    {
        Post post = new Post();
        post.Id = Convert.ToInt32(row["id_post"]);
        post.IdCreador = Convert.ToInt32(row["usuario_id"]);
        post.Titulo = row["titulo_post"].ToString();
        post.Contenido = row["text_post"].ToString();
        return post;
    }

    public bool EliminarPost(int postId) {
        ArrayList parametros = new ArrayList();
        parametros.Add(postId);
        return ado.EjecutarStoredProcedure(true, "Post_EliminarPost", parametros);
    }

    internal List<Post> BuscarPostSeguidosPorUsuario(int idUsuario)
    {
        ArrayList parametros = new ArrayList();
        parametros.Add(idUsuario);
        bool bolean = ado.EjecutarStoredProcedureDataReader("Post_PostsRelacionadosAUsuario", parametros);
        DataTable table = ado.DevolverDatosRapido();
        List<Post> posts = new List<Post>();
        foreach (DataRow row in table.Rows)
        {
            posts.Add(CrearPostDesdeRow(row));
        }

        return posts;
    }

    internal List<Post> BuscarPostDeUsuario(int idUsuario)
    {
        ArrayList parametros = new ArrayList();
        parametros.Add(idUsuario);
        bool bolean = ado.EjecutarStoredProcedureDataReader("Post_BuscarPostDelUsuario", parametros);
        DataTable table = ado.DevolverDatosRapido();
        List<Post> posts = new List<Post>();
        foreach (DataRow row in table.Rows)
        {
            posts.Add(CrearPostDesdeRow(row));
        }

        return posts;
    }

    private List<int> TopTenIdPostMasBancado()
    {
        ArrayList parametros = new ArrayList();
        bool bolean = ado.EjecutarStoredProcedureDataReader("Bancar_TopTenIdPostMasBancado", parametros);
        List<int> postIds = new List<int>();
        DataRowCollection rows = ado.DevolverDatosRapido().Rows;
        for (int i = 0; i < rows.Count - 1; i++)
        {
            postIds.Add(Convert.ToInt32(ado.DevolverDatosRapido().Rows[i]["post_id"]));
        }
        return postIds;
    }

    

    public List<Post> TopTenPostsMasBancados()
    {
        List<Post> posts = new List<Post>();
        foreach(int i in TopTenIdPostMasBancado()) {
            posts.Add(BuscarPost(i.ToString()));
        }
        return posts;
    }
}